#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
#define int long long 
vector<int> vi;
vector<int> wi;
vector<pair<int, int>> q;
int n, m, s;
long long N = 1000000000002;  // 10^12
int func(vector<int>& p1, vector<int>& p2) {
    int ret = 0;
    for(int i = 0; i < m; i++) {
        auto& [x, y] = q[i];
        ret += (p1[y] - p1[x - 1]) * (p2[y] - p2[x - 1]);
    }
    return ret;
}
signed main() {
    
    cin >> n >> m >> s;
    for(int i = 0; i < n; i++) {
        int w, v;
        cin >> w >> v;
        wi.push_back(w);
        vi.push_back(v);
    }

    for(int i = 0; i < m; i++) {
        int x, y;
        cin >> x >> y;
        q.push_back({x, y});
    }
    // for(int i = 0; i < m; i++) {
    //     cout << r[i].first << " " << r[i].second << endl;
    // }
    int l = 0, r = N;
    int t1 = -1, t2 = -1;
    while(l <= r) {
        int mid = l + ((r - l) >> 1);
        vector<int> p1(n + 2, 0);
        vector<int> p2(n + 2, 0);
        for(int i = 1; i <= n; i++) {
            if(wi[i - 1] >= mid) {
                p1[i] = p1[i - 1] + 1;
                p2[i] = p2[i - 1] + vi[i - 1];
            } else {
                p1[i] = p1[i - 1];
                p2[i] = p2[i - 1];
            }
        }
        long long y = func(p1, p2);
        if (y >= s) { // ✅ 原来这里方向反了
            t1 = abs(y - s); 
            l = mid + 1; // 越小的mid，y越大，所以要往右找更小的y
        } else {
            r = mid - 1;
        }
    }
    l = 0, r = N;
    while(l <= r) {
        int mid = l + ((r - l) >> 1);
        vector<int> p1(n + 2, 0);
        vector<int> p2(n + 2, 0);
        for(int i = 1; i <= n; i++) {
            if(wi[i - 1] >= mid) {
                p1[i] = p1[i - 1] + 1;
                p2[i] = p2[i - 1] + vi[i - 1];
            } else {
                p1[i] = p1[i - 1];
                p2[i] = p2[i - 1];
            }
        }
        long long y = func(p1, p2);
        if (y <= s) { // ✅ 同样反转逻辑
            t2 = abs(y - s);
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    if(t1 != -1) {
        if(t2 != -1) {
            cout << min(t1, t2) << endl;
            return 0;
        }
        cout << t1 << endl;
    }else {
        cout << t2 << endl;
    }
    // auto calc = [&](int mid) {
    //     vector<int> p1(n + 1, 0), p2(n + 1, 0);
    //     for (int i = 1; i <= n; i++) {
    //         if (wi[i - 1] >= mid) {
    //             p1[i] = p1[i - 1] + 1;
    //             p2[i] = p2[i - 1] + vi[i - 1];
    //         } else {
    //             p1[i] = p1[i - 1];
    //             p2[i] = p2[i - 1];
    //         }
    //     }
    //     return func(p1, p2);
    // };

    // long long ans = 1e18;
    // if (t1 != -1) ans = min(ans, llabs(calc(t1) - s));
    // if (t2 != -1) ans = min(ans, llabs(calc(t2) - s));

    // cout << ans << endl;
    return 0;
}